package principle.DependenceInversionPrinciple.origon;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author： pang-yun
 * @date： 2021-08-25 16:51
 * 功能目的 ：用于
 */

public class DrawControl {
    //随机抽取指定数量的用户
    public List<BetUser> doDrawRandom(List<BetUser> list, int count) {
        //list中 数量很少时 可以直接全部返回
        if (list.size() < count) return list;

        //乱序集合  util   Collections.shuffle  洗牌
        Collections.shuffle(list);

        //取出指定数量的中奖用户
        ArrayList<BetUser> betUsers = new ArrayList<>(count);
        list.stream().limit(count).forEach(a -> betUsers.add(a));
        return betUsers;
    }

    //按照权重排序获得指定数量的用户 作为中奖用户
    public List<BetUser> doDrawWeight(List<BetUser> list, int count) {
        //升序排列
        //  list.sort(Comparator.comparing(BetUser::getUserWeight));

        list.sort((o1, o2) -> {
            int i = o2.getUserWeight() - o1.getUserWeight();
            if (i == 0) return 0;
            return i > 0 ? 1 : -1;
        });

        // 自定义降序
        Collections.sort(list, new Comparator<BetUser>() {
            @Override
            public int compare(BetUser o1, BetUser o2) {
                return o2.getUserWeight() - o1.getUserWeight();
            }
        });

        // 取出指定数量的betUser
        ArrayList<BetUser> betUsers = new ArrayList<>(count);
        list.stream().limit(count).forEach(a -> betUsers.add(a));
        return betUsers;
    }
}
